#pragma once

#include "IXBaseObj.h"
#include "IXEnum.h"

/**
 *
 */
class ExportXSkinLib IXConfigNode : public IXBaseObj
{
    DEF_INTERFACE(IXConfigNode, _T("{9A63111B-BC9F-45c1-83B7-5DDF92412B52}"));

public:
    virtual HRESULT STDMETHODCALLTYPE   EnumNode(IN LPCTSTR szNodePath, IN LPCTSTR szNodeName, OUT IXEnum** ppEnum) = 0;
    virtual HRESULT STDMETHODCALLTYPE   EnumAttr(OUT IXEnum** ppEnum) = 0;

    virtual void    STDMETHODCALLTYPE   GetNodeName(OUT BSTR* pbstrNodeName) = 0;

    /**
     *  Get Value.
     *
     *  @param szValueName  Name of value node.
     *  @param bstrValue    Receive the value.
     *
     */
    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT BSTR* pbstrValue) = 0;
    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT LONG* plValue) = 0;
    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT BOOL* pbValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT RECT* prcValue) = 0;
    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT SIZE* pSizeValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE   GetValue(IN LPCTSTR szValueName, OUT COLORREF* pClrValue) = 0;

    virtual HRESULT STDMETHODCALLTYPE   SetValue(IN LPCTSTR szValueName, IN LPCTSTR szValue, IN BOOL bSaveFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE   DelValue(IN LPCTSTR szValueName, IN BOOL bSaveFile) = 0;

    virtual HRESULT STDMETHODCALLTYPE   SaveFile(IN LPCTSTR szFilePath) = 0;

    virtual HRESULT STDMETHODCALLTYPE   put_Node(IN XHANDLE hNode) = 0;
};
